package com.dev.springBootDemo;

import java.util.ArrayList;
import java.util.function.Predicate;


/**
 * 消费者测试类，使用自定义过滤函数筛选数据。
 */
public class PredicateTest {
 
    public static void main(String[] args) {
        // 初始化一个字符串数组，包含姓名和年龄信息。
        String[] strArray = {
                "张三,30", "李四,21", "王五,18"
        };
        // 使用myFilter方法筛选出姓名长度大于1且年龄大于20的人名。
        ArrayList<String> arrayList = myFilter(strArray,
                s -> s.split(",")[0].length() > 1,
                s -> Integer.parseInt(s.split(",")[1]) > 20
        );
        // 遍历并打印筛选结果。
        for (String array : arrayList) {
            System.out.println(array);
        }
    }
    
    /**
     * 自定义过滤方法，根据提供的两个Predicate条件对字符串数组进行筛选。
     *
     * @param strArray 输入的字符串数组，每个元素包含一个姓名和一个数字。
     * @param pre1 第一个过滤条件的Predicate。
     * @param pre2 第二个过滤条件的Predicate。
     * @return 符合所有条件的字符串集合。
     */
    // 通过Predicate接口的拼装将符合要求的字符串筛选到集合Arraylist中
    private static ArrayList<String> myFilter(String[] strArray, Predicate<String> pre1, Predicate<String> pre2) {
        // 初始化一个ArrayList用于存储筛选结果。
        ArrayList<String> array = new ArrayList<>();
        // 遍历输入数组。
        for (String str : strArray) {
            // 如果字符串同时满足pre1和pre2两个条件，则添加到结果集合中。
            if (pre1.and(pre2).test(str)) {
                array.add(str);
            }
        }
        // 返回筛选结果。
        return array;
    }
}
